/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import accesodatos.FachadaDW;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

/**
 *
 * @author Ana Maria
 */
public class TiempoEsperaCirugia {
    FachadaDW dw = new FachadaDW();
    
    public TiempoEsperaCirugia(){
    
        
    
    }

    public String construirTiempoEsperaCirguia(boolean porMesesUnAño, boolean porTresAños, boolean porEstrato, boolean porSexo,
            boolean porNivelE, boolean porEstadoC, boolean porDiasMesAño, boolean porNombreDiaSemanaMesAño, boolean porDiaFestivo,
            boolean porTrimestre, boolean porSemestre, String anio, String mes) {

        String consulta = "";

        /*por semestre*/

        String SQL_HEADER;
        String SQL_COLUMN2;
        String SQL_BODY;
        String SQL_JOIN_ACE;
        String SQL_JOIN_FECHA;
        String SQL_JOIN_DEMOGRAFIA;
        String SQL_WHERE;
        String SQL_ORDER;
        String SQL_GROUP;

        if (porMesesUnAño) {

            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";

            if (anio.equals("Todos")) {
                SQL_WHERE = "";
            } else {

                SQL_WHERE += " f.anio = '" + anio + "' ";

            }
            SQL_COLUMN2 += "f.nombre_mes data ";
            SQL_HEADER += SQL_COLUMN2;

            SQL_GROUP += "f.nombre_mes";
            SQL_ORDER += "f.mes ;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;
        }

        if (porTresAños) {

            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";

            SQL_COLUMN2 += "f.anio data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "f.anio";
            SQL_ORDER += "f.anio;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_GROUP + SQL_ORDER;


        }
        if (porEstrato) {

            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_JOIN_DEMOGRAFIA = "JOIN dimension_demografica dm ON cit.id_demografia = dm.id_demografia";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_COLUMN2 = "";

            consulta = "";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_DEMOGRAFIA;
            SQL_COLUMN2 += "dm.estrato data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "dm.estrato";
            SQL_ORDER += "dm.estrato";
            consulta += SQL_HEADER + SQL_BODY + SQL_GROUP + SQL_ORDER;

        }
        if (porSexo) {

            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_JOIN_DEMOGRAFIA = "JOIN dimension_demografica dm ON cit.id_demografia = dm.id_demografia";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_COLUMN2 = "";
            consulta = "";

            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_DEMOGRAFIA;
            SQL_COLUMN2 += "dm.sexo data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "dm.sexo";
            SQL_ORDER += "dm.sexo";
            consulta += SQL_HEADER + SQL_BODY + SQL_GROUP + SQL_ORDER;



        }
        if (porNivelE) {

            consulta = "";

            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_JOIN_DEMOGRAFIA = "JOIN dimension_demografica dm ON cit.id_demografia = dm.id_demografia";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_COLUMN2 = "";

            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_DEMOGRAFIA;
            SQL_COLUMN2 += "dm.nivel_escolaridad data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "dm.nivel_escolaridad";
            SQL_ORDER += "dm.nivel_escolaridad";
            consulta += SQL_HEADER + SQL_BODY + SQL_GROUP + SQL_ORDER;


        }

        if (porEstadoC) {

            consulta = "";

            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_JOIN_DEMOGRAFIA = "JOIN dimension_demografica dm ON cit.id_demografia = dm.id_demografia";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_COLUMN2 = "";

            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_DEMOGRAFIA;
            SQL_COLUMN2 += "dm.estado_civil data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "dm.estado_civil";
            SQL_ORDER += "dm.estado_civil";
            consulta += SQL_HEADER + SQL_BODY + SQL_GROUP + SQL_ORDER;


        }
        if (porDiasMesAño) {

            // involucra mes y año
            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";

            if (anio.equals("Todos")) {
                if (mes.equals("Todos")) {
                    SQL_WHERE = "";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' ";
                }



            } else {

                if (mes.equals("Todos")) {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' " + "AND f.anio = '" + anio + "' ";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' " + "AND f.anio = '" + anio + "' ";


                }
            }

            SQL_COLUMN2 += "f.dia data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "f.dia";
            SQL_ORDER += "promedio DESC limit 1,10;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;


        }

        if (porNombreDiaSemanaMesAño) {

            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";

            if (anio.equals("Todos")) {
                if (mes.equals("Todos")) {
                    SQL_WHERE = "";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' ";
                }



            } else {

                if (mes.equals("Todos")) {

                    SQL_WHERE = " WHERE f.anio = '" + anio + "' ";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' " + "AND f.anio = '" + anio + "' ";


                }
            }

            SQL_COLUMN2 += "f.nombre_dia data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "f.nombre_dia";
            SQL_ORDER += "promedio DESC limit 1,10;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;



        }
        if (porDiaFestivo) {


            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";

            if (anio.equals("Todos")) {
                if (mes.equals("Todos")) {
                    SQL_WHERE = "";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' ";
                }



            } else {

                if (mes.equals("Todos")) {

                    SQL_WHERE = " WHERE f.anio = '" + anio + "' ";

                } else {

                    SQL_WHERE = " WHERE f.mes = '" + mes + "' " + "AND f.anio = '" + anio + "' ";


                }
            }

            SQL_COLUMN2 += "f.nombre_festivo data ";
            SQL_HEADER += SQL_COLUMN2;
            SQL_GROUP += "f.nombre_festivo";
            SQL_ORDER += "promedio DESC limit 1,10;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;




        }

        if (porTrimestre) {

            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";


            if (anio.equals("Todos")) {

                SQL_WHERE = "";

            } else {

                SQL_WHERE += "  f.anio = '" + anio + "' ";
            }

            SQL_COLUMN2 += "QUARTER(f.fecha) data ";
            SQL_HEADER += SQL_COLUMN2;

            SQL_GROUP += " data";
            SQL_ORDER += " data;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;



        }
        if(porSemestre){
            
            consulta = "";
            SQL_HEADER = "SELECT  AVG(tiempo_espera) promedio, ";
            SQL_BODY = "FROM (SELECT  id_servicio FROM dimension_serviciopos WHERE descripcion LIKE '%Cirugía%') ciru ";
            SQL_JOIN_ACE = "JOIN atencion_cita_especializada cit ON ciru.id_servicio=cit.id_pos ";
            SQL_ORDER = " ORDER BY ";
            SQL_GROUP = " GROUP BY ";
            SQL_WHERE = " WHERE ";
            SQL_COLUMN2 = "";
            SQL_JOIN_FECHA = "JOIN fecha f ON id_fecha_atencion = f.k_fecha ";


            if (anio.equals("Todos")) {

                SQL_WHERE = "";

            } else {

                SQL_WHERE += "  f.anio = '" + anio + "' ";
            }

            SQL_COLUMN2 += "(CASE WHEN f.mes IN (1,2,3,4,5,6) THEN 1 WHEN f.mes IN (7,8,9,10,11,12) THEN 2 END) data ";
            SQL_HEADER += SQL_COLUMN2;

            SQL_GROUP += " data";
            SQL_ORDER += " data ;";
            SQL_BODY += SQL_JOIN_ACE + SQL_JOIN_FECHA;

            consulta += SQL_HEADER + SQL_BODY + SQL_WHERE + SQL_GROUP + SQL_ORDER;
        
       return consulta;
        
        }

        return consulta;
    }
    
    public void CrearGraficoDeBarras(String series, String title, String infoX, String infoY) {

        DefaultCategoryDataset data = new DefaultCategoryDataset();

        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                data.setValue(set.getInt("promedio"), set.getString("data"), "");
            }

            JFreeChart chart = ChartFactory.createBarChart3D(title, infoX, infoY, data, PlotOrientation.VERTICAL, true, true, true);

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        }
        
    }

    public void CrearGraficoDePastel(String series, String title) {



        DefaultPieDataset pie = new DefaultPieDataset();


        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                pie.setValue(set.getString("data"), set.getInt("promedio"));
            }

            JFreeChart chart = ChartFactory.createPieChart3D(title, // Title
                    pie, // Dataset
                    true, // Show legend
                    true, // Use tooltips
                    false // Configure chart to generate URLs?
                    );

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        }catch(Exception w){
        
            System.out.println(w);
        
        }

        
        

    }
    

    public static void main(String Args[]) {

        TiempoEsperaCirugia tc = new TiempoEsperaCirugia();
        String re = tc.construirTiempoEsperaCirguia(false, false, false, false, false, false, false, false, false, false, true, "Todos", "Todos");

        tc.CrearGraficoDeBarras(re, "Colombia Saludable - Tiempo de espera cirugias", "", "Promedio dias de espera");
        
        System.out.println(re);


    }
}
